// 作业题4：接口继承与联合类型
// 定义以下接口：
// ● Shape：包含 color: string
// ● Circle 继承 Shape，并添加 radius: number
// ● Rectangle 继承 Shape，并添加 width: number 和 height: number
// 编写函数 getArea(shape: Circle | Rectangle): number，根据类型计算并返回面积。
// 要求使用类型守卫区分 Circle 和 Rectangle。

interface Shape {
    color: string;
}

interface Circle extends Shape {
    radius: number;
}

interface Rectangle extends Shape {
    width: number;
    height: number;
}

function getArea(shape: Circle | Rectangle): number {
    // 使用 in 操作符作为类型守卫
    if ('radius' in shape) {
        // shape 是 Circle 类型
        return Math.PI * shape.radius ** 2;
    } else {
        // shape 是 Rectangle 类型
        return shape.width * shape.height;
    }
}

// 测试代码
const circle: Circle = {
    color: "red",
    radius: 5
};

const rectangle: Rectangle = {
    color: "blue",
    width: 10,
    height: 8
};

console.log(`圆形面积: ${getArea(circle)}`);
console.log(`矩形面积: ${getArea(rectangle)}`);

